//---------------------------------------------------------------------------
#ifndef CVisuFichierH
#define CVisuFichierH
//---------------------------------------------------------------------------
#include "Outils.h"
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <map>
//---------------------------------------------------------------------------
enum eTypeVisuFichier
{
  etvf_SESAME = 0,
  etvf_ASCII,
};

enum eJeuDeCaracteres
{
  ejdc_Windows = 0,
  ejdc_DOS,
  ejdc_MAC,
};



class PACKAGE_OUTILS CVisuFichier : public TPanel
{
private:

        TImage      *ImageEditeur;
        TImage      *MarqueDroite;
        TImage      *MarqueGauche;
        TImage      *TraitMarqueDroite;
        TImage      *TraitMarqueGauche;

        AnsiString   m_szFicName;
        int          m_Position;
        int          m_Longueur;
        enum eTypeVisuFichier m_TypeVisuFichier;
        enum eJeuDeCaracteres m_JeuCaracteres;
        TNotifyEvent m_OnPositionChange;
        TNotifyEvent m_OnLongueurChange;
   	    bool         FDragging,m_InversionVideo;
        char m_DelimiteurColonne,m_DelimiteurChaine;
        int  m_Zoom;
        int m_LargeurImageOrigine;
        int m_HauteurImageOrigine;
        

		void __fastcall ChargeMarque( TImage* Marque, AnsiString szNomBmp);
		void __fastcall PaintBoxEditeurPaint(TObject *Sender);
        void __fastcall MarqueMouseDown(TObject *Sender, TMouseButton Button,	TShiftState Shift, int X, int Y);
        void __fastcall MarqueMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
        void __fastcall MarqueMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);

		void __fastcall ScrollBarScroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos);

        int  __fastcall PixelToChar(int nNbPixel);
        int  __fastcall CharToPixel(int nNbChar);

      	void __fastcall _ReplaceMarque( bool bGauche);
		#define         ReplaceMarqueGauche() _ReplaceMarque( true);
		#define         ReplaceMarqueDroite() _ReplaceMarque( false);

        void __fastcall SetPosition( int Position);
        void __fastcall SetLongueur( int Longueur);
        void __fastcall SetZoom( int pZoom);

    bool __fastcall LireChamps(char *szBuffer,TStringList *ListeChamps,char SeparateurChamp,char DelimChaine);
    bool __fastcall LireChamp(char *szBuffer,int &Position,AnsiString &Chaine,char SeparateurChamp,char DelimChaine);
protected:
    void __fastcall WMOnCreate(Messages::TMessage &Message);
    BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_CREATE, TMessage, WMOnCreate);
    END_MESSAGE_MAP(TPanel)
public:
  TScrollBox  *ScrollBoxEditeur;
    void __fastcall PanelEditeurResize(TObject *Sender);
	__fastcall CVisuFichier(TComponent* Owner);
	virtual __fastcall ~CVisuFichier();
  void __fastcall Clear();
  void __fastcall Afficher();
  FARPROC    FonctionScrollBoxEditeur;
__published:
	__property AnsiString NomFichier = {read=m_szFicName,write=m_szFicName};
	__property int        Position = {read=m_Position,write=SetPosition};
	__property int        Longueur = {read=m_Longueur,write=SetLongueur};
	__property enum eTypeVisuFichier TypeVisuFichier = {read=m_TypeVisuFichier,write=m_TypeVisuFichier};
  __property enum eJeuDeCaracteres JeuCaracteres = {read = m_JeuCaracteres,write = m_JeuCaracteres};
  __property bool InversionVideo = {read = m_InversionVideo,write = m_InversionVideo,default=true};
  __property char DelimiteurColonne = {read = m_DelimiteurColonne,write = m_DelimiteurColonne};
  __property char DelimiteurChaine = {read = m_DelimiteurChaine,write = m_DelimiteurChaine};
	__property int              Zoom = {read=m_Zoom,write=SetZoom};
    __property TNotifyEvent OnPositionChange = {read=m_OnPositionChange,write=m_OnPositionChange};
    __property TNotifyEvent OnLongueurChange = {read=m_OnLongueurChange,write=m_OnLongueurChange};
};
using namespace std;
typedef map < HWND, CVisuFichier *, less<HWND> > c_VisuFichier;
//---------------------------------------------------------------------------
#endif
